[1mdiff --git a/Makefile.in b/Makefile.in[m
[1mindex 052ce6e..6752d8e 100644[m
[1m--- a/Makefile.in[m
[1m+++ b/Makefile.in[m
[36m@@ -161,8 +161,8 @@[m [mCTAGS = ctags[m
 CSCOPE = cscope[m
 DIST_SUBDIRS = $(SUBDIRS)[m
 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in README \[m
[31m-	ar-lib compile config.guess config.sub install-sh ltmain.sh \[m
[31m-	missing[m
[32m+[m	[32mar-lib compile config.guess config.sub depcomp install-sh \[m
[32m+[m	[32mltmain.sh missing[m
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)[m
 distdir = $(PACKAGE)-$(VERSION)[m
 top_distdir = $(distdir)[m
[1mdiff --git a/src/rc_gui.c b/src/rc_gui.c[m
[1mindex 953bf34..124a056 100644[m
[1m--- a/src/rc_gui.c[m
[1m+++ b/src/rc_gui.c[m
[36m@@ -101,14 +101,14 @@[m [mstatic int needs_reboot;[m
 [m
 static int loc_count, country_count, char_count;[m
 [m
[31m-/* Global locale accessed from multiple threads */[m
[32m+[m[32m/* Globals accessed from multiple threads */[m
 [m
[31m-static char glocale[64];[m
[32m+[m[32mstatic char gbuffer[512];[m
[32m+[m[32mGThread *pthread;[m
 [m
 /* Lists for keyboard setting */[m
 [m
 GtkListStore *model_list, *layout_list, *variant_list;[m
[31m-char cmd_buf[512];[m
 [m
 /* Helpers */[m
 [m
[36m@@ -461,7 +461,7 @@[m [mstatic gpointer locale_thread (gpointer data)[m
     char buffer[256];[m
 [m
     system ("locale-gen");[m
[31m-    sprintf (buffer, "update-locale LANG=%s", glocale);[m
[32m+[m[32m    sprintf (buffer, "update-locale LANG=%s", gbuffer);[m
     system (buffer);[m
     g_idle_add (close_msg, NULL);[m
     return NULL;[m
[36m@@ -592,11 +592,11 @@[m [mstatic void on_set_locale (GtkButton* btn, gpointer ptr)[m
             {[m
                 fgets (buffer, sizeof (buffer) - 1, fp);[m
                 cptr = strtok (buffer, " ");[m
[31m-                strcpy (glocale, cptr);[m
[32m+[m[32m                strcpy (gbuffer, cptr);[m
                 pclose (fp);[m
             }[m
 [m
[31m-            if (glocale[0] && strcmp (glocale, init_locale))[m
[32m+[m[32m            if (gbuffer[0] && strcmp (gbuffer, init_locale))[m
             {[m
                 // look up the current locale setting from init_locale in /etc/locale.gen[m
                 sprintf (buffer, "grep '%s ' /usr/share/i18n/SUPPORTED", init_locale);[m
[36m@@ -615,8 +615,8 @@[m [mstatic void on_set_locale (GtkButton* btn, gpointer ptr)[m
                     system (buffer);[m
                 }[m
 [m
[31m-                // look up the new locale setting from glocale in /etc/locale.gen[m
[31m-                sprintf (buffer, "grep '%s ' /usr/share/i18n/SUPPORTED", glocale);[m
[32m+[m[32m                // look up the new locale setting from gbuffer in /etc/locale.gen[m
[32m+[m[32m                sprintf (buffer, "grep '%s ' /usr/share/i18n/SUPPORTED", gbuffer);[m
                 fp = popen (buffer, "r");[m
                 if (fp != NULL)[m
                 {[m
[36m@@ -1066,11 +1066,12 @@[m [mstatic void layout_changed (GtkComboBox *cb, char *init_variant)[m
 [m
 static gpointer keyboard_thread (gpointer ptr)[m
 {[m
[32m+[m[32m    //system ("dpkg-reconfigure -f noninteractive keyboard-configuration");[m
     system ("invoke-rc.d keyboard-setup start");[m
     system ("setsid sh -c 'exec setupcon -k --force <> /dev/tty1 >&0 2>&1'");[m
     system ("udevadm trigger --subsystem-match=input --action=change");[m
     system ("udevadm settle");[m
[31m-    system (cmd_buf);[m
[32m+[m[32m    system (gbuffer);[m
     g_idle_add (close_msg, NULL);[m
     return NULL;[m
 }[m
[36m@@ -1208,40 +1209,56 @@[m [mstatic void on_set_keyboard (GtkButton* btn, gpointer ptr)[m
     // run the dialog[m
     if (gtk_dialog_run (GTK_DIALOG (dlg)) == GTK_RESPONSE_OK)[m
     {[m
[32m+[m[32m        n = 0;[m
         path = gtk_tree_path_new_from_indices (gtk_combo_box_get_active (GTK_COMBO_BOX (keymodel_cb)), -1);[m
         gtk_tree_model_get_iter (GTK_TREE_MODEL (model_list), &iter, path);[m
         gtk_tree_model_get (GTK_TREE_MODEL (model_list), &iter, 1, &new_mod, -1);[m
[31m-        sprintf (cmd_buf, "grep -q XKBMODEL /etc/default/keyboard && sed -i 's/XKBMODEL=.*/XKBMODEL=%s/g' /etc/default/keyboard || echo 'XKBMODEL=%s' >> /etc/default/keyboard", new_mod, new_mod);[m
[31m-        system (cmd_buf);[m
[32m+[m[32m        if (g_strcmp0 (new_mod, init_model))[m
[32m+[m[32m        {[m
[32m+[m[32m            sprintf (gbuffer, "grep -q XKBMODEL /etc/default/keyboard && sed -i 's/XKBMODEL=.*/XKBMODEL=%s/g' /etc/default/keyboard || echo 'XKBMODEL=%s' >> /etc/default/keyboard", new_mod, new_mod);[m
[32m+[m[32m            system (gbuffer);[m
[32m+[m[32m            n = 1;[m
[32m+[m[32m        }[m
         gtk_tree_path_free (path);[m
 [m
         path = gtk_tree_path_new_from_indices (gtk_combo_box_get_active (GTK_COMBO_BOX (keylayout_cb)), -1);[m
         gtk_tree_model_get_iter (GTK_TREE_MODEL (layout_list), &iter, path);[m
         gtk_tree_model_get (GTK_TREE_MODEL (layout_list), &iter, 1, &new_lay, -1);[m
[31m-        sprintf (cmd_buf, "grep -q XKBLAYOUT /etc/default/keyboard && sed -i 's/XKBLAYOUT=.*/XKBLAYOUT=%s/g' /etc/default/keyboard || echo 'XKBLAYOUT=%s' >> /etc/default/keyboard", new_lay, new_lay);[m
[31m-        system (cmd_buf);[m
[32m+[m[32m        if (g_strcmp0 (new_lay, init_layout))[m
[32m+[m[32m        {[m
[32m+[m[32m            sprintf (gbuffer, "grep -q XKBLAYOUT /etc/default/keyboard && sed -i 's/XKBLAYOUT=.*/XKBLAYOUT=%s/g' /etc/default/keyboard || echo 'XKBLAYOUT=%s' >> /etc/default/keyboard", new_lay, new_lay);[m
[32m+[m[32m            system (gbuffer);[m
[32m+[m[32m            n = 1;[m
[32m+[m[32m        }[m
         gtk_tree_path_free (path);[m
 [m
         path = gtk_tree_path_new_from_indices (gtk_combo_box_get_active (GTK_COMBO_BOX (keyvar_cb)), -1);[m
         gtk_tree_model_get_iter (GTK_TREE_MODEL (variant_list), &iter, path);[m
         gtk_tree_model_get (GTK_TREE_MODEL (variant_list), &iter, 1, &new_var, -1);[m
[31m-        sprintf (cmd_buf, "grep -q XKBVARIANT /etc/default/keyboard && sed -i 's/XKBVARIANT=.*/XKBVARIANT=%s/g' /etc/default/keyboard || echo 'XKBVARIANT=%s' >> /etc/default/keyboard", new_var, new_var);[m
[31m-        system (cmd_buf);[m
[32m+[m[32m        if (g_strcmp0 (new_var, init_var))[m
[32m+[m[32m        {[m
[32m+[m[32m            sprintf (gbuffer, "grep -q XKBVARIANT /etc/default/keyboard && sed -i 's/XKBVARIANT=.*/XKBVARIANT=%s/g' /etc/default/keyboard || echo 'XKBVARIANT=%s' >> /etc/default/keyboard", new_var, new_var);[m
[32m+[m[32m            system (gbuffer);[m
[32m+[m[32m            n = 1;[m
[32m+[m[32m        }[m
         gtk_tree_path_free (path);[m
 [m
         // this updates the current session when invoked after the udev update[m
[31m-        sprintf (cmd_buf, "setxkbmap %s%s%s%s%s", new_lay, new_mod[0] ? " -model " : "", new_mod, new_var[0] ? " -variant " : "", new_var);[m
[32m+[m[32m        sprintf (gbuffer, "setxkbmap %s%s%s%s%s", new_lay, new_mod[0] ? " -model " : "", new_mod, new_var[0] ? " -variant " : "", new_var);[m
         g_free (new_mod);[m
         g_free (new_lay);[m
         g_free (new_var);[m
 [m
[31m-        // warn about a short delay...[m
[31m-        delay_warning (_("Setting keyboard - please wait..."));[m
[32m+[m[32m        if (n)[m
[32m+[m[32m        {[m
[32m+[m[32m            // warn about a short delay...[m
[32m+[m[32m            delay_warning (_("Setting keyboard - please wait..."));[m
 [m
[31m-        // launch a thread with the system call to update the keyboard[m
[31m-        g_thread_new (NULL, keyboard_thread, NULL);[m
[32m+[m[32m            // launch a thread with the system call to update the keyboard[m
[32m+[m[32m            pthread = g_thread_new (NULL, keyboard_thread, NULL);[m
[32m+[m[32m            if (ptr != NULL) gtk_dialog_run (GTK_DIALOG (msg_dlg));[m
[32m+[m[32m        }[m
     }[m
[31m-[m
     gtk_widget_destroy (dlg);[m
 }[m
 [m
[36m@@ -1486,6 +1503,25 @@[m [mint main (int argc, char *argv[])[m
     gtk_init (&argc, &argv);[m
     gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default(), PACKAGE_DATA_DIR);[m
 [m
[32m+[m[32m    if (argc == 2 && !strcmp (argv[1], "-w"))[m
[32m+[m[32m    {[m
[32m+[m[32m        on_set_wifi (NULL, NULL);[m
[32m+[m[32m        return 0;[m
[32m+[m[32m    }[m
[32m+[m
[32m+[m[32m    if (argc == 2 && !strcmp (argv[1], "-k"))[m
[32m+[m[32m    {[m
[32m+[m[32m        // set up list stores for keyboard layouts[m
[32m+[m[32m        model_list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);[m
[32m+[m[32m        layout_list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);[m
[32m+[m[32m        variant_list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);[m
[32m+[m
[32m+[m[32m        pthread = 0;[m
[32m+[m[32m        on_set_keyboard (NULL, (gpointer) 1);[m
[32m+[m[32m        if (pthread) g_thread_join (pthread);[m
[32m+[m[32m        return 0;[m
[32m+[m[32m    }[m
[32m+[m
     // build the UI[m
     builder = gtk_builder_new ();[m
     gtk_builder_add_from_file (builder, PACKAGE_DATA_DIR "/rc_gui.ui", NULL);[m
[36m@@ -1493,7 +1529,6 @@[m [mint main (int argc, char *argv[])[m
     if (!can_configure ())[m
     {[m
         dlg = (GtkWidget *) gtk_builder_get_object (builder, "errordialog");[m
[31m-        gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (main_dlg));[m
         g_object_unref (builder);[m
         gtk_dialog_run (GTK_DIALOG (dlg));[m
         gtk_widget_destroy (dlg);[m
